-- title: Proto Bots
-- author: Silas
-- desc: Defeat the proto bots as you survive.
-- site: website link
-- license:
-- version: 0.1
-- script: lua
music(0)
function GetDistance( x1, y1, x2, y2 )
return math.sqrt( ( x2 - x1 )^2 + ( y2 - y1 )^2 )
end
x = 0
y = 80
s = 2
pd = 1
px = -200
py = -200
pSpr = 7
leveldata={}
enemies={}
function CreateEnemies()
leveldata={}
enemies={}
table.insert(leveldata, { kills=1 } )
table.insert(leveldata, { kills=3 } )
table.insert(leveldata, { kills=5 } )
table.insert(leveldata, { kills=7 } )
table.insert(leveldata, { kills=5 } )
table.insert(leveldata, { kills=5 } )
table.insert(leveldata, { kills=7 } )
table.insert(leveldata, { KILLS=7 } )
table.insert(enemies, { x=100,y=50, mapx=0, mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=100,mapx=30,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=75, mapx=30,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=50, mapx=30,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=60, mapx=60,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=50, mapx=60,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=82, mapx=60,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=100,mapx=60,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=75, mapx=60,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=100,mapx=90,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=55, mapx=90,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=92, mapx=90,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=75, mapx=90,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=81, mapx=90,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=97, mapx=90,mapy=0, hp=5 } )
table.insert(enemies, { x=100,y=49, mapx=90,mapy=0, hp=5 } )
end
CreateEnemies()
boss = {
sprites = {
{ s=71, x=8, y=0 },
{ s=72, x=16, y=0 },
{ s=87, x=8, y=8 },
{ s=88, x=16, y=8 },
{ s=103, x=8, y=16 },
{ s=104, x=16, y=16 },
{ s=105, x=24, y=16 },
{ s=106, x=32, y=16 },
{ s=107, x=40, y=16 },
{ s=118, x=0, y=24 },
{ s=119, x=8, y=24 },
{ s=120, x=16, y=24 },
{ s=121, x=24, y=24 },
{ s=122, x=32, y=24 },
{ s=123, x=40, y=24 },
{ s=137, x=24, y=32 },
{ s=138, x=32, y=32 },
{ s=139, x=40, y=32 },
{ s=152, x=16, y=40 },
{ s=153, x=24, y=40 },
{ s=154, x=32, y=40 },
{ s=155, x=40, y=40 },
{ s=156, x=48, y=40 },
{ s=168, x=16, y=48 },
{ s=169, x=24, y=48 },
{ s=170, x=32, y=48 },
{ s=171, x=40, y=48 },
{ s=172, x=48, y=48 },
},
hp = 100,
mapx=120, mapy=0,
x = 100,
y = 40,
shootCooldown = 0
}
rocket = {
x = -100,
y = -100,
speed=1
}
bosslevel=120
mapx=0
mapy=0
function TIC()
map(mapx,mapy)
spr(s,x,y,0)
spr(pSpr,px,py,0)
spr(7,px,py,0)
levelname = math.floor(mapx / 30 + 1)
print( "Level " .. levelname, 5, 5 )
print("Need " .. leveldata[levelname].kills .. " kills", 5, 20 )
if leveldata[levelname] ~= nil then
if leveldata[levelname].kills == 0 then
mapx=mapx+30
end
for id, en in pairs( enemies ) do
if en.mapx == mapx and en.mapy == mapy then
-- This enemy is on the screen
spr(8,en.x,en.y,0)
print(en.hp,en.x,en.y-8,12)
-- Enemy vibrate:
en.x=en.x+math.random(-1,1)
en.y=en.y+math.random(-1,1)
-- Enemy hit by bullet?
dist = GetDistance(px,py,en.x,en.y)
if dist <= 8 then
-- Collision!
--en.x = -200
en.hp = en.hp - 1
px=-200
py=-200
if en.hp == 0 then
leveldata[levelname].kills = leveldata[levelname].kills - 1
en.x = -200
en.y = -200
end
end
end
end
if mapx == bosslevel then
-- BOSS
for id, sp in pairs( boss.sprites ) do
spr( sp.s, boss.x+sp.x, boss.y+sp.y, 0 )
end
print(boss.hp,boss.x,boss.y-8,12)
if GetDistance(px,py,boss.x+16,boss.y) <= 20 then
px=-200
py=-200
boss.hp = boss.hp - 5
end
if boss.hp <= 0 then
mapx=mapx+30
end
if GetDistance(x,y,rocket.x,rocket.y) <= 8 then
mapx=0
mapy=0
CreateEnemies()
end
if boss.shootCooldown > 0 then
boss.shootCooldown = boss.shootCooldown - 1
end
if boss.shootCooldown == 0 then
boss.shootCooldown = math.random( 150, 300 )
rocket.x = boss.x
rocket.y = boss.y+24
end
spr(41,rocket.x,rocket.y,0)
if rocket.x >= -8 then
rocket.x=rocket.x-rocket.speed
if y < rocket.y then
rocket.y=rocket.y-rocket.speed/2
elseif y > rocket.y then
rocket.y=rocket.y+rocket.speed/2
end
end
end
if btn(0) then y=y-1 end -- UP
if btn(1) then y=y+1 end -- DOWN
if btn(2) then x=x-1
s=6
end -- LEFT
if btn(3) then x=x+1
s=4
end -- RIGHT
if btn(5) then -- "x" button -- shoot
pSpr = 7
pd=3
px=x
py=y
elseif btn(4) then
pSpr = 7
pd=-3
px=x
py=y
end
px = px + pd
end
end
--
-- 000:eeeeeeeeeddddddeeeddddeeeddeeddeeddeeddeeeddddeeeddddddeeeeeeeee
-- 001:6666666666666666666666666656666666666666666666666666656666666666
-- 002:dddddddddd444dddd444ddddd44dddddd44dddddd444dddddd444ddddddddddd
-- 003:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
-- 004:0044400004444400e44cdd00e44cdd00eeeeeee0e444eee0044044000dd0dd00
-- 005:dddddddddddddddddddddddddddddddddddddddd6d6d6d6d6566666666665666
-- 006:000444000044444000ddc44e00ddc44e0eeeeeee0eee444e0044044000dd0dd0
-- 007:000000000000000000098000008ac900009ca800000890000000000000000000
-- 008:00000000000000000000000000ddddd00022d0000dddddd0d0d0d0d0d0d0d0dd
-- 009:c4c4c4c4443333ccc3c334344334c33cc33c433443433c3ccc3333444c4c4c4c
-- 010:c2c2c2c2221111ccc1c112122112c11cc11c211221211c1ccc1111222c2c2c2c
-- 011:c9c9c9c9998888ccc8c889899889c88cc88c988998988c8ccc8888999c9c9c9c
-- 012:c6c6c6c6667777ccc7c776766776c77cc77c677667677c7ccc7777666c6c6c6c
-- 013:8888888888888888888888888888888888888888888888888888888888888888
-- 014:7777677777777777677777677776777777777777777777767776777767777777
-- 015:8888888888888888888888888888888888888888787878787776777776777776
-- 016:66666666666666666666666d66666ddd66666daa6666ddaa666daaaa66daacca
-- 017:6666666666dddddddddaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-- 018:66666666ddd66666aadddd66aaaaadddaaaaaaadaaaaaaadaaaacaaaaaaaaaaa
-- 019:6666666666666666666666666666666666666666d6666666ad666666aad66666
-- 020:0000000000000000044000000044400000004440000044444004404044400040
-- 021:0000000000000000000000000003300033033300443333330443333344333333
-- 022:0000000000000000000000220000002200002222330002223333330033332220
-- 023:0000000000000000000000000000000020200000222220002222222002222222
-- 032:66daccaa6ddccaaa6dcccaaa6dcaaaaa6dcaaaca6daaaaaa6daaaaaa6daaaaaa
-- 033:aaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaa
-- 034:acaaaaaaaaccaaacaaacaaaaaaaccaaaacaacaaaaaaacaaaaaaccaaaaaaccaaa
-- 035:aad66666cadd6666caad6666caad6666ccad6666acad6666ccad6666caad6666
-- 036:4440044040004400044440000444400040004444444400004004444000004444
-- 037:4333333343333333433033334340333044433300440300004400000000000000
-- 038:3333333233332232003220220003002200000220000002000000000000000000
-- 039:2222222222222222222222220022220002222000222000000000000000000000
-- 041:00000000000000dd00ddbdd0bbbbbb00b234bdddbbbbbb0000ddbdd0000000dd
-- 048:6daaacaa6daaacaa6ddaacca6edaacca6edaaccc6eedaaac67eedaaa677eeaaa
-- 049:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaacaaaaaaaaacc
-- 050:aaaccaacacaccaaaaaaccaacaaaccaaaaaaccaaaaaaccaaaacccaaadcccaaaad
-- 051:caad6666aaad6666aadd6666aade6666aade6666adee6666dee76666ee776666
-- 064:6677edaa6667eeed666777ee6666677766666666666666666666666666666666
-- 065:aaaaaaaadddaaaaaeedddddd7eeeeeee77eeeeee677777776666666666666666
-- 066:aaaaadddaaddddeedddeeee7eeee7777eee77666777766666666666666666666
-- 067:e7766666e7666666776666666666666666666666666666666666666666666666
-- 071:0000000000000000000000000000000000000000000000000000000d000000dd
-- 072:00000000000000000000000000000000000000000dddd000ddddddd0dddddddd
-- 087:00000ddd0000dddd0000dddd0002222200222222022222220ddddddd0ddddddd
-- 088:dddddddddddddddddddddddd2222dddd22222ddd2222dddddddddddddddddddd
-- 089:d0000000d0000000d0000000d0000000d0000000d0000000de000000dedd0000
-- 102:0000000000000000000000000000000000000000000000000000000000eeee0e
-- 103:dddddddddddddddddddddddddddddddddddddd00ddddd00000000000ee000000
-- 104:dddddddddddddddeddddddee0000000000000000000000000000000000000000
-- 105:eedddd00eddddddddddddddddddddddd0ddddddd000ddddd0000dddd00000eee
-- 106:000000ff000fffffddffffffdddfffffddddffffdddddfffdddddfffedddddff
-- 107:fff00000ffff0000fffff000fffff000ffffff00fffffff0ffffffffffffffff
-- 118:0e0000e2e00000e20eeeee420234234202342342023423420eeeee42e00000e2
-- 119:34ee000034eeeeee34eeefff3eeeef443eeeef333eeeef2234eeefff34eeeeee
-- 120:00000000eeeeeeeeffffffff444444443333333322222222ffffffffeeeeeeee
-- 121:0000eeeeeeeeeffffeeeef44ffeeef3f3feeef3fffeeef2ffeeeef22eeeeefff
-- 122:eeedddfffeeddffffeedffffffffffffffffffffffffffdffeeedddffeeedddf
-- 123:fffffffffffffffffffffffffffffffffffffffffffffffffffffff0ffffff00
-- 134:0e0000e200eeee0e000000000000000000000000000000000000000000000000
-- 135:34ee0000ee000000000000000000000000000000000000000000000000000000
-- 136:0000000e00000000000000000000000000000000000000000000000000000000
-- 137:eeeeeeee000eeeee000eeeee0000eeee000000dd00000ddd0000dddd0deddddd
-- 138:eeeeddd0eeeeddd0eeeeddd0eeedddd0ddddddd0dddddde0ddddddeddddddded
-- 139:ffff0000000000000000000000000000000000000000000000000000dde00000
-- 152:00000ddd000edddd00dedddd00ddeddd0dddee000dddde00deddde00ddeeee00
-- 153:ddeedddddddedddddddeddee0000eeed0000dddd0000ddd0000eedd000ddeee0
-- 154:ddddddeedddddddeedddddde0dddddde00eeeee000dddde000dddddd00eeeeee
-- 155:ddedd000ddedddd0deeddddededdddeededddeed00dddedd000deedd0000dddd
-- 156:000000000000000000000000d0000000dd000000dde00000dded0000dded0000
-- 167:0000000e0000000d0000000d0000000d000000de000000dd000000dd000000dd
-- 168:edddd000eeedd000ddeee000ddddd000eeed0000ddee0000dddd0000ddd00000
-- 169:00eeddd000eeee0000dddd0000dddd000edddd000deedee00ddeee000ddddd00
-- 170:000ddddd000ddeee000eeddd0000dddd0000dddd0000deee00000ddd00000ddd
-- 171:d0000ddde0000dddd00000dddd0000eeee00000ded00000ddde00000eee00000
-- 172:ddedd000deedd000eeddde00edddde00ddddde00ddddded0ddddeed00eeeedd0
--
--
--
-- 000:00000000ffffffff00000000ffffffff
-- 001:0123456789abcdeffedcba9876543210
-- 002:0123456789abcdef0123456789abcdef
--
--
-- 000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304000000000
--
--
-- 000:000000b00006c00000900000a0000a00000090000080000a000000b00008100000400006600000a0000880000050000410000090000a100000000000a0000c50000050000a50000610000070000e900000a0000a000000a0000ca0000880000460000870000a800004100000100000500004100000100000900006000000100000b00000b0000880000a900004800006100000100000b0000aa00008000000d00006100000c00008000000c00008d00006100000100000c0000aa00006b00000
--
--
-- 000:100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060
--
--
-- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f66d696df4f4f494b0c2566c86333c57
--